1package renderer
2
3import (
4 "image"
5 "image/color"
6 "image/draw"
7 "image/png"
8 "log"
9 "math"
10 "os"
11 "strconv"
12 "time"
13
14 "github.com/pbnjay/pixfont"
15)
16
17var FrameBuffers []*image.Gray
18var PerformanceTrackerTimer int64
19var ScreenCount int
20var ScreenWidth int
21var ScreenHeight int
22
23func checkError(error error) {
24 if error != nil {
25 log.Fatal(error)
26 }
27}
28
29func InitFrameBuffers() {
30 for i := 0; i < ScreenCount; i++ {
31 upLeft := image.Point{0, 0}
32 lowRight := image.Point{ScreenWidth, ScreenHeight}
33 img := image.NewGray(image.Rectangle{upLeft, lowRight})
34 FrameBuffers = append(FrameBuffers, img)
35 }
36}
37
38func DrawPixel(x int, y int, v int) {
39 FrameBuffers[int(math.Floor(float64(x)/float64(ScreenWidth)))].Set(x-int(math.Floor(float64(x)/float64(ScreenWidth)))*ScreenWidth, y, color.Gray{uint8(255 * v)})
40}
41
42func DrawHorizontalLine(startX int, startY, length int, v int) {
43 for i := 0; i < length; i++ {
44 DrawPixel(startX+i, startY, v)
45 }
46}
47
48func DrawVerticalLine(frameBuffer *image.Gray, startX int, startY, length int, v int) {
49 for i := 0; i < length; i++ {
50 DrawPixel(startX, startY+i, v)
51 }
52}
53
54func AddTextAllDisplays(x int, y int, v int, label string) {
55 col := color.Gray{uint8(255 * v)}
56 for i := 0; i < ScreenCount; i++ {
57 pixfont.DrawString(FrameBuffers[i], x-i*ScreenWidth, y, label, col)
58 }
59}
60
61func BlankScreen(v int) {
62 for i := 0; i < ScreenCount; i++ {
63 draw.Draw(FrameBuffers[i], FrameBuffers[i].Bounds(), &image.Uniform{color.Gray{uint8(255 * v)}}, image.ZP, draw.Src)
64 }
65}
66
67func PerformanceTrackerStart() {
68 PerformanceTrackerTimer = time.Now().UTC().UnixNano()
69}
70
71func PerformanceTrackerEnd() int64 {
72 return time.Now().UTC().UnixNano() - PerformanceTrackerTimer
73}
74
75func DrawPihonLogo() {
76 DrawHorizontalLine(113, 4, 8, 1)
77 DrawHorizontalLine(135, 4, 8, 1)
78 DrawHorizontalLine(110, 5, 14, 1)
79 DrawHorizontalLine(132, 5, 14, 1)
80 DrawHorizontalLine(108, 6, 3, 1)
81 DrawHorizontalLine(113, 6, 1, 1)
82 DrawHorizontalLine(121, 6, 1, 1)
83 DrawHorizontalLine(123, 6, 3, 1)
84 DrawHorizontalLine(130, 6, 3, 1)
85 DrawHorizontalLine(134, 6, 1, 1)
86 DrawHorizontalLine(142, 6, 1, 1)
87 DrawHorizontalLine(145, 6, 3, 1)
88 DrawHorizontalLine(108, 7, 1, 1)
89 DrawHorizontalLine(125, 7, 2, 1)
90 DrawHorizontalLine(129, 7, 2, 1)
91 DrawHorizontalLine(147, 7, 1, 1)
92 DrawHorizontalLine(108, 8, 2, 1)
93 DrawHorizontalLine(125, 8, 2, 1)
94 DrawHorizontalLine(129, 8, 2, 1)
95 DrawHorizontalLine(146, 8, 2, 1)
96 DrawHorizontalLine(108, 9, 1, 1)
97 DrawHorizontalLine(126, 9, 4, 1)
98 DrawHorizontalLine(141, 9, 1, 1)
99 DrawHorizontalLine(147, 9, 1, 1)
100 DrawHorizontalLine(108, 10, 2, 1)
101 DrawHorizontalLine(116, 10, 1, 1)
102 DrawHorizontalLine(126, 10, 4, 1)
103 DrawHorizontalLine(139, 10, 1, 1)
104 DrawHorizontalLine(146, 10, 2, 1)
105 DrawHorizontalLine(108, 11, 2, 1)
106 DrawHorizontalLine(118, 11, 2, 1)
107 DrawHorizontalLine(127, 11, 2, 1)
108 DrawHorizontalLine(136, 11, 2, 1)
109 DrawHorizontalLine(146, 11, 2, 1)
110 DrawHorizontalLine(109, 12, 2, 1)
111 DrawHorizontalLine(120, 12, 1, 1)
112 DrawHorizontalLine(127, 12, 2, 1)
113 DrawHorizontalLine(135, 12, 1, 1)
114 DrawHorizontalLine(145, 12, 2, 1)
115 DrawHorizontalLine(109, 13, 2, 1)
116 DrawHorizontalLine(121, 13, 2, 1)
117 DrawHorizontalLine(126, 13, 4, 1)
118 DrawHorizontalLine(133, 13, 2, 1)
119 DrawHorizontalLine(145, 13, 2, 1)
120 DrawHorizontalLine(110, 14, 2, 1)
121 DrawHorizontalLine(122, 14, 2, 1)
122 DrawHorizontalLine(126, 14, 4, 1)
123 DrawHorizontalLine(132, 14, 2, 1)
124 DrawHorizontalLine(144, 14, 2, 1)
125 DrawHorizontalLine(110, 15, 2, 1)
126 DrawHorizontalLine(124, 15, 8, 1)
127 DrawHorizontalLine(144, 15, 2, 1)
128 DrawHorizontalLine(111, 16, 3, 1)
129 DrawHorizontalLine(124, 16, 8, 1)
130 DrawHorizontalLine(142, 16, 3, 1)
131 DrawHorizontalLine(111, 17, 3, 1)
132 DrawHorizontalLine(123, 17, 10, 1)
133 DrawHorizontalLine(142, 17, 2, 1)
134 DrawHorizontalLine(113, 18, 2, 1)
135 DrawHorizontalLine(122, 18, 12, 1)
136 DrawHorizontalLine(141, 18, 2, 1)
137 DrawHorizontalLine(114, 19, 28, 1)
138 DrawHorizontalLine(114, 20, 11, 1)
139 DrawHorizontalLine(131, 20, 11, 1)
140 DrawHorizontalLine(113, 21, 3, 1)
141 DrawHorizontalLine(121, 21, 2, 1)
142 DrawHorizontalLine(133, 21, 2, 1)
143 DrawHorizontalLine(140, 21, 3, 1)
144 DrawHorizontalLine(112, 22, 2, 1)
145 DrawHorizontalLine(120, 22, 2, 1)
146 DrawHorizontalLine(134, 22, 2, 1)
147 DrawHorizontalLine(142, 22, 2, 1)
148 DrawHorizontalLine(111, 23, 3, 1)
149 DrawHorizontalLine(120, 23, 2, 1)
150 DrawHorizontalLine(134, 23, 2, 1)
151 DrawHorizontalLine(143, 23, 2, 1)
152 DrawHorizontalLine(111, 24, 2, 1)
153 DrawHorizontalLine(118, 24, 5, 1)
154 DrawHorizontalLine(134, 24, 3, 1)
155 DrawHorizontalLine(143, 24, 2, 1)
156 DrawHorizontalLine(110, 25, 2, 1)
157 DrawHorizontalLine(117, 25, 7, 1)
158 DrawHorizontalLine(132, 25, 7, 1)
159 DrawHorizontalLine(144, 25, 2, 1)
160 DrawHorizontalLine(110, 26, 2, 1)
161 DrawHorizontalLine(116, 26, 24, 1)
162 DrawHorizontalLine(144, 26, 2, 1)
163 DrawHorizontalLine(110, 27, 2, 1)
164 DrawHorizontalLine(115, 27, 4, 1)
165 DrawHorizontalLine(124, 27, 8, 1)
166 DrawHorizontalLine(138, 27, 3, 1)
167 DrawHorizontalLine(144, 27, 2, 1)
168 DrawHorizontalLine(110, 28, 2, 1)
169 DrawHorizontalLine(113, 28, 4, 1)
170 DrawHorizontalLine(125, 28, 6, 1)
171 DrawHorizontalLine(139, 28, 4, 1)
172 DrawHorizontalLine(144, 28, 2, 1)
173 DrawHorizontalLine(109, 29, 7, 1)
174 DrawHorizontalLine(140, 29, 7, 1)
175 DrawHorizontalLine(108, 30, 8, 1)
176 DrawHorizontalLine(127, 30, 2, 1)
177 DrawHorizontalLine(141, 30, 3, 1)
178 DrawHorizontalLine(145, 30, 3, 1)
179 DrawHorizontalLine(107, 31, 3, 1)
180 DrawHorizontalLine(112, 31, 3, 1)
181 DrawHorizontalLine(127, 31, 2, 1)
182 DrawHorizontalLine(141, 31, 2, 1)
183 DrawHorizontalLine(146, 31, 3, 1)
184 DrawHorizontalLine(107, 32, 2, 1)
185 DrawHorizontalLine(113, 32, 2, 1)
186 DrawHorizontalLine(127, 32, 2, 1)
187 DrawHorizontalLine(141, 32, 2, 1)
188 DrawHorizontalLine(147, 32, 2, 1)
189 DrawHorizontalLine(106, 33, 2, 1)
190 DrawHorizontalLine(113, 33, 1, 1)
191 DrawHorizontalLine(122, 33, 12, 1)
192 DrawHorizontalLine(142, 33, 1, 1)
193 DrawHorizontalLine(148, 33, 2, 1)
194 DrawHorizontalLine(106, 34, 2, 1)
195 DrawHorizontalLine(113, 34, 1, 1)
196 DrawHorizontalLine(127, 34, 2, 1)
197 DrawHorizontalLine(142, 34, 1, 1)
198 DrawHorizontalLine(148, 34, 2, 1)
199 DrawHorizontalLine(106, 35, 2, 1)
200 DrawHorizontalLine(113, 35, 2, 1)
201 DrawHorizontalLine(126, 35, 4, 1)
202 DrawHorizontalLine(141, 35, 2, 1)
203 DrawHorizontalLine(148, 35, 2, 1)
204 DrawHorizontalLine(106, 36, 2, 1)
205 DrawHorizontalLine(112, 36, 3, 1)
206 DrawHorizontalLine(125, 36, 6, 1)
207 DrawHorizontalLine(141, 36, 3, 1)
208 DrawHorizontalLine(148, 36, 2, 1)
209 DrawHorizontalLine(106, 37, 2, 1)
210 DrawHorizontalLine(112, 37, 3, 1)
211 DrawHorizontalLine(124, 37, 2, 1)
212 DrawHorizontalLine(127, 37, 2, 1)
213 DrawHorizontalLine(130, 37, 2, 1)
214 DrawHorizontalLine(141, 37, 3, 1)
215 DrawHorizontalLine(148, 37, 2, 1)
216 DrawHorizontalLine(106, 38, 2, 1)
217 DrawHorizontalLine(112, 38, 4, 1)
218 DrawHorizontalLine(123, 38, 2, 1)
219 DrawHorizontalLine(127, 38, 2, 1)
220 DrawHorizontalLine(131, 38, 2, 1)
221 DrawHorizontalLine(140, 38, 4, 1)
222 DrawHorizontalLine(148, 38, 2, 1)
223 DrawHorizontalLine(106, 39, 2, 1)
224 DrawHorizontalLine(112, 39, 6, 1)
225 DrawHorizontalLine(122, 39, 2, 1)
226 DrawHorizontalLine(125, 39, 6, 1)
227 DrawHorizontalLine(132, 39, 2, 1)
228 DrawHorizontalLine(137, 39, 7, 1)
229 DrawHorizontalLine(147, 39, 3, 1)
230 DrawHorizontalLine(107, 40, 2, 1)
231 DrawHorizontalLine(111, 40, 10, 1)
232 DrawHorizontalLine(122, 40, 1, 1)
233 DrawHorizontalLine(127, 40, 2, 1)
234 DrawHorizontalLine(133, 40, 1, 1)
235 DrawHorizontalLine(135, 40, 10, 1)
236 DrawHorizontalLine(147, 40, 2, 1)
237 DrawHorizontalLine(107, 41, 14, 1)
238 DrawHorizontalLine(127, 41, 2, 1)
239 DrawHorizontalLine(135, 41, 5, 1)
240 DrawHorizontalLine(144, 41, 5, 1)
241 DrawHorizontalLine(108, 42, 4, 1)
242 DrawHorizontalLine(116, 42, 6, 1)
243 DrawHorizontalLine(127, 42, 2, 1)
244 DrawHorizontalLine(134, 42, 5, 1)
245 DrawHorizontalLine(144, 42, 4, 1)
246 DrawHorizontalLine(108, 43, 3, 1)
247 DrawHorizontalLine(117, 43, 5, 1)
248 DrawHorizontalLine(134, 43, 4, 1)
249 DrawHorizontalLine(145, 43, 3, 1)
250 DrawHorizontalLine(108, 44, 3, 1)
251 DrawHorizontalLine(118, 44, 4, 1)
252 DrawHorizontalLine(134, 44, 3, 1)
253 DrawHorizontalLine(145, 44, 2, 1)
254 DrawHorizontalLine(109, 45, 2, 1)
255 DrawHorizontalLine(119, 45, 3, 1)
256 DrawHorizontalLine(134, 45, 2, 1)
257 DrawHorizontalLine(145, 45, 2, 1)
258 DrawHorizontalLine(109, 46, 2, 1)
259 DrawHorizontalLine(120, 46, 2, 1)
260 DrawHorizontalLine(134, 46, 2, 1)
261 DrawHorizontalLine(145, 46, 2, 1)
262 DrawHorizontalLine(109, 47, 2, 1)
263 DrawHorizontalLine(120, 47, 2, 1)
264 DrawHorizontalLine(134, 47, 1, 1)
265 DrawHorizontalLine(145, 47, 2, 1)
266 DrawHorizontalLine(110, 48, 2, 1)
267 DrawHorizontalLine(120, 48, 3, 1)
268 DrawHorizontalLine(133, 48, 2, 1)
269 DrawHorizontalLine(144, 48, 2, 1)
270 DrawHorizontalLine(110, 49, 3, 1)
271 DrawHorizontalLine(121, 49, 3, 1)
272 DrawHorizontalLine(132, 49, 3, 1)
273 DrawHorizontalLine(143, 49, 3, 1)
274 DrawHorizontalLine(111, 50, 2, 1)
275 DrawHorizontalLine(121, 50, 14, 1)
276 DrawHorizontalLine(143, 50, 2, 1)
277 DrawHorizontalLine(112, 51, 3, 1)
278 DrawHorizontalLine(120, 51, 15, 1)
279 DrawHorizontalLine(141, 51, 3, 1)
280 DrawHorizontalLine(113, 52, 4, 1)
281 DrawHorizontalLine(119, 52, 7, 1)
282 DrawHorizontalLine(131, 52, 5, 1)
283 DrawHorizontalLine(139, 52, 4, 1)
284 DrawHorizontalLine(114, 53, 9, 1)
285 DrawHorizontalLine(134, 53, 7, 1)
286 DrawHorizontalLine(116, 54, 6, 1)
287 DrawHorizontalLine(134, 54, 6, 1)
288 DrawHorizontalLine(118, 55, 4, 1)
289 DrawHorizontalLine(134, 55, 4, 1)
290 DrawHorizontalLine(120, 56, 3, 1)
291 DrawHorizontalLine(133, 56, 3, 1)
292 DrawHorizontalLine(121, 57, 4, 1)
293 DrawHorizontalLine(131, 57, 3, 1)
294 DrawHorizontalLine(123, 58, 10, 1)
295 DrawHorizontalLine(125, 59, 6, 1)
296}
297
298func DrawLightningIcon() {
299 DrawHorizontalLine(253, 1, 1, 1)
300 DrawHorizontalLine(252, 2, 1, 1)
301 DrawHorizontalLine(251, 3, 2, 1)
302 DrawHorizontalLine(250, 4, 5, 1)
303 DrawHorizontalLine(249, 5, 5, 1)
304 DrawHorizontalLine(251, 6, 2, 1)
305 DrawHorizontalLine(251, 7, 1, 1)
306 DrawHorizontalLine(250, 8, 1, 1)
307}
308
309func DrawWifiEnabledIcon() {
310 DrawHorizontalLine(239, 1, 8, 1)
311 DrawHorizontalLine(238, 2, 1, 1)
312 DrawHorizontalLine(247, 2, 1, 1)
313 DrawHorizontalLine(240, 3, 6, 1)
314 DrawHorizontalLine(239, 4, 1, 1)
315 DrawHorizontalLine(246, 4, 1, 1)
316 DrawHorizontalLine(241, 5, 4, 1)
317 DrawHorizontalLine(240, 6, 1, 1)
318 DrawHorizontalLine(245, 6, 1, 1)
319 DrawHorizontalLine(242, 7, 2, 1)
320 DrawHorizontalLine(242, 8, 2, 1)
321}
322
323func DrawWifiDisabledIcon() {
324 DrawHorizontalLine(239, 1, 8, 1)
325 DrawHorizontalLine(238, 2, 1, 1)
326 DrawHorizontalLine(245, 2, 1, 1)
327 DrawHorizontalLine(247, 2, 1, 1)
328 DrawHorizontalLine(240, 3, 6, 1)
329 DrawHorizontalLine(239, 4, 1, 1)
330 DrawHorizontalLine(243, 4, 1, 1)
331 DrawHorizontalLine(246, 4, 1, 1)
332 DrawHorizontalLine(241, 5, 4, 1)
333 DrawHorizontalLine(240, 6, 2, 1)
334 DrawHorizontalLine(245, 6, 1, 1)
335 DrawHorizontalLine(240, 7, 1, 1)
336 DrawHorizontalLine(242, 7, 2, 1)
337 DrawHorizontalLine(239, 8, 1, 1)
338 DrawHorizontalLine(242, 8, 2, 1)
339}
340
341func UpdateFrameBuffersToFiles(frameBuffer *image.Gray, bufferIndex int, sequenceIndex int) {
342 f, _ := os.Create("./virtual-screens/" + strconv.Itoa(sequenceIndex) + "." + strconv.Itoa(bufferIndex) + "img.png")
343 png.Encode(f, frameBuffer)
344}